#ifndef POSTPROCESS_H_
#define POSTPROCESS_H_

#include <stdint.h>
#include <vector>

#include <iomanip>
#include <sstream>

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

#include "common.hpp"

#define OBJ_NAME_MAX_SIZE 16              // 对象名称最大长度
#define OBJ_NUMB_MAX_SIZE 64              // 最大检测对象数量
#define OBJ_CLASS_NUM 15                   // 检测类别数（修改为15类）
#define NMS_THRESH 0.45                   // 非极大值抑制阈值
#define BOX_THRESH 0.1                    // 🔧 根据RKNN调试结果，设置为0.1（模型输出>0.1的有17个框）
#define PROP_BOX_SIZE 19                  // YOLOv8: 每个检测框的属性数量 (x,y,w,h + 15 classes)

// YOLOv8后处理函数 - 单输出层
int post_process_yolov8(uint16_t *input, int model_in_h, int model_in_w, float conf_threshold, float nms_threshold,
    BOX_RECT pads, float scale_w, float scale_h, std::vector<int32_t> &qnt_zps,
    std::vector<float> &qnt_scales, DetectionResultsGroup *group,
    int num_outputs = 0, uint32_t* output_dims = nullptr); // 将 int8_t* 改为 uint16_t*

// 兼容YOLOv5的后处理函数（保留）
// int post_process(int8_t *input0, int8_t *input1, int8_t *input2, int model_in_h, int model_in_w, float conf_threshold,
//                  float nms_threshold, BOX_RECT pads, float scale_w, float scale_h, std::vector<int32_t> &qnt_zps,
//                  std::vector<float> &qnt_scales, DetectionResultsGroup *group);

void deinitPostProcess();

int draw_image_detect(cv::Mat &cur_img, std::vector<DetectionBox> &results, int cur_frame_id);

void show_draw_results(DetectionResultsGroup &results_group);

#endif // POSTPROCESS_H_